//    1  获取用户购物车数据 需要 token  id  
// 1.1 如何获取token  --->  登录成功了 就有
// 1.2  如何获取用户 id ---> 登录成功了就有

// 本地缓存和 pinia 都有   
// 从哪里获取

import { ref, computed, onMounted, Ref, h } from 'vue';

import useUserStore from '@/pinia/index'  // 用户的

import { getCartList, cartUpdateSelectone, cartRemove, cartUpdatenum } from '@/api/api'



// 加入购物车逻辑在addCart 这个组件
export function useCart() {
    const cartList = ref([])
    // const userid = ref("user_3f8de3d0-e224-4511-818a-315a5037fa4f")
    const userid = "user_3f8de3d0-e224-4511-818a-315a5037fa4f"
    // const userStore = useUserStore()
    // let usersId = userStore.userId

    // 发送请求 
    onMounted(async () => {
        let res = await getCartList({ userid: userid })
        cartList.value = res.data
    })


    // 单选逻辑    通过id  找到对应的这一项 进入 status 取反 

    const handleSelectOne = (id, staus) => {
        cartList.value.forEach(item => {
            if (id === item.id) {
                item.flag = staus
            }
        })
        //  发送请求 更新数据库
        cartUpdateSelectone(id, staus)
    }




    //更新单个商品的数据   数量  
    const handleChangeGoodNum = (num: any, obj: any) => {
        console.log(num, obj);   //8 
        //  商品数量添加了   更新购物车里面的num  值  
        // num:1     num:4
        // 如何实现 num  变化 
        // 更新数据 
        cartList.value.forEach(item => {
            if (obj.name === item.id) {
                item.num = num
            }
        })

        // 更新购物车的商品数量接口
        cartUpdatenum(obj.name, num)





    }


    // 删除数据
    const handleDeleteGood = (id: any) => {
        //通过id  获取当前的索引 
        let currentIndex = cartList.value.findIndex(item => item.id === id)
        cartList.value.splice(currentIndex, 1)
        // 删除数据 
        cartRemove(id)





    }




    // 全选 
    //  全选的状态 跟 单选的状态  只要有一个不选中 那么全选不选中 
    //   遍历单选   every    把  遍历后的结果 给到全选就ok 
    const checked = computed({
        // get 方法获取状态 
        get() {
            return cartList.value.every((item: any) => item.flag)
        },
        set(allCheckStatus) {
            console.log(allCheckStatus)
            // set  方法 设置状态 
            //   如果全选的状态为真 那么每个单选都为true   如果全选的状态为假(不选中) 每个单选都不选中
            cartList.value.forEach((item: any) => {
                item.flag = allCheckStatus
            })



            // 根据全选状态更新当前用户的数据
            cartUpdateSelectall(allCheckStatus, usersId)

        }

    })


    const totalPrice = computed(() => {
        return (
            cartList.value
                ?.filter((item) => item.flag)
                .reduce((current, next) => {
                    return current + next.originprice * next.num
                }, 0) * 100
        )
    })





    return {
        cartList,
        handleSelectOne,
        handleChangeGoodNum,
        handleDeleteGood,
        checked,
        totalPrice
    }
}















